package BC108_矩阵交换;

import java.util.Scanner;

/*描述
KiKi有一个矩阵，他想知道经过k次行变换或列变换后得到的矩阵。请编程帮他解答。

输入描述：
第一行包含两个整数n和m，表示一个矩阵包含n行m列，用空格分隔。 (1≤n≤10,1≤m≤10)

从2到n+1行，每行输入m个整数（范围-231~231-1），用空格分隔，共输入n*m个数，表示第一个矩阵中的元素。
接下来一行输入k，表示要执行k次操作（1≤k≤5）。接下来有k行，每行包括一个字符t和两个数a和b，中间用空格格分隔，t代表需要执行的操作，当t为字符'r'时代表进行行变换，当t为字符'c'时代表进行列变换，a和b为需要互换的行或列（1≤a≤b≤n≤10，1≤a≤b≤m≤10）。


输出描述：
输出n行m列，为矩阵交换后的结果。每个数后面有一个空格。
示例1
输入：
2 2
1 2
3 4
1
r 1 2
输出：
3 4
1 2 */
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();

        int[][] arr = new int[n][m];

        for (int i = 0; i < n; i++){
            for (int j = 0; j < m; j++){
                arr[i][j] = sc.nextInt();
            }
        }

        int k = sc.nextInt();


        for (int z = 0; z < k; z++) {
            String t = sc.next();
            int a = sc.nextInt();
            int b = sc.nextInt();
            if (t.equals("r")){
                for (int i = 0; i < m; i++) {
                    int temp = arr[a - 1][i];
                    arr[a - 1][i] = arr[b - 1][i];
                    arr[b - 1][i] = temp;
                }
            }else if (t.equals("c")){

                for (int i = 0; i < n; i++) {
                    int temp = arr[i][a - 1];
                    arr[i][a - 1] = arr[i][b - 1];
                    arr[i][b - 1] = temp;
                }
            }
        }

        for (int i = 0; i < n; i++){
            for (int j = 0; j < m; j++){
                System.out.printf("%d ", arr[i][j]);
            }
            System.out.println();
        }

    }
}
